﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using NangLuongTieuDiemDTO.DTO;

namespace NangLuongTieuDiemDAO.DAO
{
    public class LoiHeThongDAO
    {
        #region "[Insert]"
        /// <summary>
        /// Thêm 1 đối tượng Loi He Thong
        /// </summary>
        /// <param name="lhtDTO">đối tượng LoiHeThong cần thêm</param>
        /// <returns></returns>
        public static void Insert(LoiHeThongDTO lhtDTO)
        {
            try
            {
                // Mo ket noi
                SqlConnection cn = NangLuongTieuDiemDAO.DataHelper.SqlDataHelper.ConnectionData();

                // Chuoi sql thao tac csdl
                string strSQL = "insert into LoiHeThong(TenLoi, NgayTao, TenHamBiLoi,SuaLoi, GhiChu) OUTPUT INSERTED.Id values(@TenLoi, @NgayTao, @TenHamBiLoi, @SuaLoi, @GhiChu)";

                // Thuc thi chuoi sql
                SqlCommand cmd = new SqlCommand(strSQL, cn);

                cmd.Parameters.Add("@TenLoi", SqlDbType.NText);
                cmd.Parameters.Add("@NgayTao", SqlDbType.DateTime);
                cmd.Parameters.Add("@TenHamBiLoi", SqlDbType.NText);
                cmd.Parameters.Add("@SuaLoi", SqlDbType.Bit);
                cmd.Parameters.Add("@GhiChu", SqlDbType.NText);

                cmd.Parameters["@TenLoi"].Value = lhtDTO.TenLoi;
                cmd.Parameters["@NgayTao"].Value = lhtDTO.NgayTao;
                cmd.Parameters["@TenHamBiLoi"].Value = lhtDTO.TenHamBiLoi;
                cmd.Parameters["@SuaLoi"].Value = lhtDTO.SuaLoi;
                cmd.Parameters["@GhiChu"].Value = lhtDTO.GhiChu;


                cmd.ExecuteNonQuery();
                            
                cn.Close();
            }
            catch(Exception ex)
            {
                InSert_LoiHeThong("Insert", ex);
            }
        }
        #endregion

        #region "[Update]"
        /// <summary>
        /// Cập nhật 1 đối tượng Loi He Thong
        /// </summary>
        /// <param name="lhtDTO">đối tượng LoiHeThong cần cập nhật</param>
        /// <returns></returns>
        public static bool Update(LoiHeThongDTO lhtDTO)
        {
            SqlConnection cn;
            bool isSuccess = false;
            try
            {

                // Mo ket noi
                cn = NangLuongTieuDiemDAO.DataHelper.SqlDataHelper.ConnectionData();

                // Chuoi sql thao tac csdl
                string strSQL = "Update LoiHeThong Set TenLoi = @TenLoi , NgayTao = @NgayTao , TenHamBiLoi = @TenHamBiLoi , SuaLoi = @SuaLoi , GhiChu = @GhiChu where ID = @ID";

                // Thuc thi chuoi sql
                SqlCommand cmd = new SqlCommand(strSQL, cn);

                cmd.Parameters.Add("@TenLoi", SqlDbType.NText);
                cmd.Parameters.Add("@NgayTao", SqlDbType.DateTime);
                cmd.Parameters.Add("@TenHamBiLoi", SqlDbType.NText);
                cmd.Parameters.Add("@SuaLoi", SqlDbType.Bit);
                cmd.Parameters.Add("@GhiChu", SqlDbType.NText);

                cmd.Parameters["@TenLoi"].Value = lhtDTO.TenLoi;
                cmd.Parameters["@NgayTao"].Value = lhtDTO.NgayTao;
                cmd.Parameters["@TenHamBiLoi"].Value = lhtDTO.TenHamBiLoi;
                cmd.Parameters["@SuaLoi"].Value = lhtDTO.SuaLoi;
                cmd.Parameters["@GhiChu"].Value = lhtDTO.GhiChu;

                int k = cmd.ExecuteNonQuery();

                // dong ket noi csdl
                cn.Close();
                isSuccess = k > 0 ? true : false;

            }
            catch (Exception ex)
            {
                InSert_LoiHeThong("Update", ex);
            }
            return isSuccess;
        }
        #endregion

        #region "[Delete]"
        /// <summary>
        /// xóa 1 đối tượng Loi He Thong
        /// </summary>
        /// <param name="ID">mã đối tượng LoiHeThong cần xóa</param>
        /// <returns></returns>
        public static bool Delete(int ID)
        {
            SqlConnection cn;
            bool isSuccess = false;
            try
            {
                // Mo ket noi
                cn = NangLuongTieuDiemDAO.DataHelper.SqlDataHelper.ConnectionData();

                // Chuoi sql thao tac csdl
                string strSQL = " Delete LoiHeThong where ID = @ID";


                // Thuc thi chuoi sql
                SqlCommand cmd = new SqlCommand(strSQL, cn);

                cmd.Parameters.Add("@ID", SqlDbType.Int);
                cmd.Parameters["@ID"].Value = ID;


                cmd.ExecuteNonQuery();
                // dong ket noi csdl
                cn.Close();
                isSuccess = true;

            }
            catch (Exception ex)
            {
                InSert_LoiHeThong("Delete", ex);
            }
            return isSuccess;
        }
        #endregion

        #region "[Get all]"
        /// <summary>
        /// lấy danh sách các đối tượng LoiHeThong
        /// </summary>
        /// <returns></returns>
        public static List<LoiHeThongDTO> GetAll()
        {
            List<LoiHeThongDTO> ds_lhtDto = new List<LoiHeThongDTO>();
            try
            {
                SqlConnection cn;

                // Mo ket noi
                cn = NangLuongTieuDiemDAO.DataHelper.SqlDataHelper.ConnectionData();

                // Chuoi sql thao tac csdl

                string strSQL = " Select * From LoiHeThong ";


                // Thuc thi chuoi sql
                SqlCommand cmd = new SqlCommand(strSQL, cn);

                SqlDataReader dr = cmd.ExecuteReader();



                while (dr.Read() == true)
                {
                    LoiHeThongDTO lhtDto = new LoiHeThongDTO();
                    lhtDto.ID = dr.GetInt32(0);
                    lhtDto.TenLoi = dr.GetString(1);
                    lhtDto.NgayTao = dr.GetDateTime(2);
                    lhtDto.TenHamBiLoi = dr.GetString(3);
                    lhtDto.SuaLoi = dr.GetBoolean(4);
                    lhtDto.GhiChu = dr.GetString(5);

                    ds_lhtDto.Add(lhtDto);
                }

                cn.Close();
            }
            catch (Exception ex)
            {
                InSert_LoiHeThong("GetAll", ex);
            }
            return ds_lhtDto;
        }
        #endregion

        #region "[SelectByPrimaryKey]"
        /// <summary>
        /// lấy 1 đối tượng LoiHeThong
        /// </summary>
        /// <param name="ID">mã đối tượng LoiHeThong cần lấy</param>
        /// <returns></returns>
        public static LoiHeThongDTO SelectByPrimaryKey(int ID)
        {
            LoiHeThongDTO lhtDto = null;
            try
            {
                SqlConnection cn;

                // Mo ket noi
                cn = NangLuongTieuDiemDAO.DataHelper.SqlDataHelper.ConnectionData();

                // Chuoi sql thao tac csdl
                string strSQL = " Select * From LoiHeThong where ID = @ID";


                // Thuc thi chuoi sql
                SqlCommand cmd = new SqlCommand(strSQL, cn);

                cmd.Parameters.Add("@ID", SqlDbType.Int);
                cmd.Parameters["@ID"].Value = ID;

                SqlDataReader dr = cmd.ExecuteReader();
                lhtDto = new LoiHeThongDTO();

                while (dr.Read() == true)
                {

                    lhtDto.ID = dr.GetInt32(0);
                    lhtDto.TenLoi = dr.GetString(1);
                    lhtDto.NgayTao = dr.GetDateTime(2);
                    lhtDto.TenHamBiLoi = dr.GetString(3);
                    lhtDto.SuaLoi = dr.GetBoolean(4);
                    lhtDto.GhiChu = dr.GetString(5);
                }

                // Dong ket noi csdl
                cn.Close();
            }
            catch (Exception ex)
            {
                InSert_LoiHeThong("SelectByPrimaryKey", ex);
            }
            return lhtDto;
        }

        public static int SelectMaxId()
        {
            SqlConnection cn;

            // Mo ket noi
            cn = NangLuongTieuDiemDAO.DataHelper.SqlDataHelper.ConnectionData();

            // Chuoi sql thao tac csdl

            string strSQL = " SELECT MAX(ID) FROM LoiHeThong ";
            // Thuc thi chuoi sql
            SqlCommand cmd = new SqlCommand(strSQL, cn);

            // Dong ket noi csdl
            int maxId = (int)cmd.ExecuteScalar();
            cn.Close();
            return maxId;
        }
        #endregion

        #region "[Hàm insert lỗi hệ thống]"
        public static void InSert_LoiHeThong(string TenHam, Exception ex)
        {
            LoiHeThongDTO lhtDto = new LoiHeThongDTO();
            lhtDto.TenLoi = ex.Message.ToString();
            lhtDto.NgayTao = DateTime.Now;
            lhtDto.TenHamBiLoi = "LoiHeThongDAO_" + TenHam;
            lhtDto.SuaLoi = false;
            lhtDto.GhiChu = "";
            LoiHeThongDAO.Insert(lhtDto);

        }
        #endregion
    }
}
